package com.lcy.mapstruct.helper;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.BufferedReader;
import java.io.IOException;
import java.sql.Clob;
import java.sql.SQLException;

/**
 * MapStruct辅助工具类
 * 处理一些MapStruct无法直接处理的转换
 */
@Slf4j
@Component
public class MapStructHelper {

    /**
     * 将Object对象转换为字符串，特别处理CLOB/BLOB类型
     * @param obj 输入对象
     * @return 转换后的字符串
     */
    public String objectToString(Object obj) {
        if (obj == null) {
            return null;
        }
        
        // 如果已经是字符串，直接返回
        if (obj instanceof String) {
            return (String) obj;
        }
        
        // 处理CLOB类型
        if (obj instanceof Clob) {
            return clobToString((Clob) obj);
        }
        
        // 其他类型转换为字符串
        return String.valueOf(obj);
    }
    
    /**
     * 将CLOB类型转换为字符串
     * @param clob CLOB对象
     * @return 转换后的字符串
     */
    private String clobToString(Clob clob) {
        if (clob == null) {
            return null;
        }
        
        StringBuilder sb = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(clob.getCharacterStream())) {
            String line;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            return sb.toString();
        } catch (SQLException | IOException e) {
            log.error("CLOB转换字符串失败", e);
            return null;
        }
    }
} 